﻿//获取页面url
function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return '';
}




/*-------通用方法------*/
/*使用前请保证在同级页面中加入了对Zebra_Dialog的引用*/
/*input类型标签的输入检测(不含checkbox)*/
/*domName:该dom节点的名称*/
/*strAlert:错误提示*/
/*dom节点的数据长度(-1表示不限制数据长度)*/
function CheckInput(domName, strAlert, numlength) {
    var pattern = new RegExp("[~'!@#$%^&*()-+_=:]"); //检验非法字符
    var strValue = $.trim($('input[name=' + domName + ']').val());
    if (strValue == "") {
        $.Zebra_Dialog('<strong>' + strAlert + '不能为空 ！</strong>');
        $('input[name=' + domName + ']').focus();
        return false;
    } else {
        if (pattern.test(strValue)) {
            $.Zebra_Dialog('<strong>' + strAlert + '中含有非法字符，请检查 ！</strong>');
            $('input[name=' + domName + ']').focus();
            return false;
        } else {
            if (parseInt(numlength) != -1) {
                if (strValue.length < parseInt(numlength)) {
                    $.Zebra_Dialog('<strong>' + strAlert + '的长度至少为' + numlength + '位，请检查您的输入！</strong>');
                    $('input[name=' + domName + ']').focus();
                    return false;
                } else {
                    return true;
                }
            } else {
                return true;
            }
        }
    }
};



/*select类型标签的输入检测*/
/*domName:该dom节点的名称*/
/*strAlert:错误提示*/
function CheckSelect(domName, strAlert) {
    var strValue = $('select[name=' + domName + ']').val();
    if (strValue == "") {
        $.Zebra_Dialog('<strong>' + strAlert + '不能为空 ！</strong>');
        $('select[name=' + domName + ']').focus();
        return false;
    } else {
        return true;
    }

};

/*检验数字整形*/
/*num:接受检验的字符*/
/*strAlert:错误提示*/
/*numMin:数值最小范围(-1表示不限制最小值)*/
/*numMax:数值最大范围(-1表示不限制最大值)*/
function CheckNumInt(num, strAlert, numMin, numMax) {
    if ($.trim(num) == "") {
        $.Zebra_Dialog('<strong>' + strAlert + '不能为空 ！</strong>');
        return false;
    }
    if (isNaN(num)) {
        $.Zebra_Dialog('<strong>' + strAlert + '需要输入数字类型 ！</strong>');
        return false;
    } else {
        if (parseInt(numMin) != -1) {
            if (parseInt(num) < parseInt(numMin)) {
                $.Zebra_Dialog('<strong>' + strAlert + '的数值不能小于' + numMin + ' ！</strong>');
                return false;
            }
        }

        if (parseInt(numMax) != -1) {
            if (parseInt(num) > parseInt(numMax)) {
                $.Zebra_Dialog('<strong>' + strAlert + '的数值不能大于' + numMax + ' ！</strong>');
                return false;
            }
        }
        return true;
    }
};

function CheckNum(num, strAlert) {
    if ($.trim(num) == "") {
        $.Zebra_Dialog('<strong>' + strAlert + '不能为空 ！</strong>');
        return false;
    }
    if (isNaN(num)) {
        $.Zebra_Dialog('<strong>' + strAlert + '需要输入数字类型 ！</strong>');
        return false;
    }
    return true;
};

function CheckNumDecimal(value, strAlert, numlength) {
    if ($.trim(value) == "") {
        $.Zebra_Dialog('<strong>' + strAlert + '不能为空 ！</strong>');
        return false;
    }
    if (isNaN(value)) {
        $.Zebra_Dialog('<strong>' + strAlert + '需要输入小数类型 ！</strong>');
        return false;
    }

    if (value != null && value != '') {
        var decimalIndex = value.indexOf('.');
        if (decimalIndex == '-1') {
            return true;
        } else {
            var decimalPart = value.substring(decimalIndex + 1);
            if (decimalPart.length > parseInt(numlength)) {
                $.Zebra_Dialog('<strong>' + strAlert + '最多可以输入位' + numlength + '小数 ！</strong>');
                return false;
            } else {
                return true;
            }
        }
    }
    return false;

};



//验证11位手机号 1开头
function CheckMobile(str) {
    var re = /^1\d{10}$/
    if (re.test(str)) {
        return true;
    } else {
        return false;
    }
};

/*验证电话号码
验证规则：区号+号码，区号以0开头，3位或4位
号码由7位或8位数字组成
区号与号码之间可以无连接符，也可以“-”连接
如01088888888,010-88888888,0955-7777777 */
function CheckPhone(str) {
    var re = /^0\d{2,3}-?\d{7,8}$/;
    if (re.test(str)) {
        return true;
    } else {
        return false;
    }
};

function CheckEmail(str) {
    var re = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
    if (re.test(str)) {
        return true;
    } else {
        $.Zebra_Dialog('<strong> 邮箱号格式不正确</strong>');
        return false;
    }
};

//检测身份证号 18和15
function checkIdcard(num) {
  
    num = num.toLocaleUpperCase();
   
    //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。
    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
        return false;
    }
    //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
    //下面分别分析出生日期和校验位
    var len, re;
    len = num.length;
    if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);

        //检查生日日期是否正确
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            return false;
        }
        else {
            //将15位身份证转成18位
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            num += arrCh[nTemp % 11];
            return true;
        }
    }
    if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);

        //检查生日日期是否正确
        var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            return false;
        }
        else {
            //检验18位身份证的校验码是否正确。
            //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
            var valnum;
            var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
            var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
            var nTemp = 0, i;
            for (i = 0; i < 17; i++) {
                nTemp += num.substr(i, 1) * arrInt[i];
            }
            valnum = arrCh[nTemp % 11];
            if (valnum != num.substr(17, 1)) {
                return false;
            }
            return true;
        }
    }
    return false;
};




//说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。  
function accMul(arg1, arg2) {
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try { m += s1.split(".")[1].length } catch (e) { }
    try { m += s2.split(".")[1].length } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}

//除法函数，用来得到精确的除法结果  
//说明：javascript的除法结果会有误差，在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。  
//调用：accDiv(arg1,arg2)  
//返回值：arg1除以arg2的精确结果  
function accDiv(arg1, arg2) {
    var t1 = 0, t2 = 0, r1, r2;
    try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
    try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""));
        r2 = Number(arg2.toString().replace(".", ""));
        return (r1 / r2) * pow(10, t2 - t1);
    }
}

//返回两位小数
function changeTwoDecimal_f(x) {
    var f_x = parseFloat(x);
    if (isNaN(f_x)) {
        alert('您试图将字符串转换为数字，请检查!');
        return false;
    }
    var f_x = Math.round(x * 100) / 100;
    var s_x = f_x.toString();
    var pos_decimal = s_x.indexOf('.');
    if (pos_decimal < 0) {
        pos_decimal = s_x.length;
        s_x += '.';
    }
    while (s_x.length <= pos_decimal + 2) {
        s_x += '0';
    }
    return s_x;
}

//计算两个时间所差的天数
function diffDate(str1, str2) {
    str1 = str1.replace(/-/g, "/");
    str2 = str2.replace(/-/g, "/");
    var d1;
    var d2;
    var diffday = 0;
    if (str1 == "") {
        d1 = new Date();
    } else {
        d1 = new Date(str1);
    }
    if (str2 == "") {
        d2 = new Date();
    } else {
        d2 = new Date(str2);
    }
    diffday = Date.parse(d1) - Date.parse(d2);
    diffday = diffday.toFixed(2) / 86400000;
    return diffday;
}


//生成新的GUID
function newGuid() {
    var guid = "";
    for (var i = 1; i <= 32; i++) {
        var n = Math.floor(Math.random() * 16.0).toString(16);
        guid += n;
        if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
            guid += "-";
    }
    return guid;
}

//将数字转换为人民币大写形式
function changeNumMoneyToChinese(money) {
    var cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字
    var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位
    var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位
    var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位
    var cnInteger = "整"; //整数金额时后面跟的字符
    var cnIntLast = "元"; //整型完以后的单位
    var maxNum = 999999999999999.9999; //最大处理的数字
    var IntegerNum; //金额整数部分
    var DecimalNum; //金额小数部分
    var ChineseStr = ""; //输出的中文金额字符串
    var parts; //分离金额后用的数组，预定义
    if (money == "") {
        return "";
    }
    money = parseFloat(money);
    if (money >= maxNum) {
        alert('超出最大处理数字');
        return "";
    }
    if (money == 0) {
        ChineseStr = cnNums[0] + cnIntLast + cnInteger;
        return ChineseStr;
    }
    money = money.toString(); //转换为字符串
    if (money.indexOf(".") == -1) {
        IntegerNum = money;
        DecimalNum = '';
    } else {
        parts = money.split(".");
        IntegerNum = parts[0];
        DecimalNum = parts[1].substr(0, 4);
    }
    if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换
        var zeroCount = 0;
        var IntLen = IntegerNum.length;
        for (var i = 0; i < IntLen; i++) {
            var n = IntegerNum.substr(i, 1);
            var p = IntLen - i - 1;
            var q = p / 4;
            var m = p % 4;
            if (n == "0") {
                zeroCount++;
            } else {
                if (zeroCount > 0) {
                    ChineseStr += cnNums[0];
                }
                zeroCount = 0; //归零
                ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m == 0 && zeroCount < 4) {
                ChineseStr += cnIntUnits[q];
            }
        }
        ChineseStr += cnIntLast;
        //整型部分处理完毕
    }
    if (DecimalNum != '') { //小数部分
        var decLen = DecimalNum.length;
        for (var i = 0; i < decLen; i++) {
            var n = DecimalNum.substr(i, 1);
            if (n != '0') {
                ChineseStr += cnNums[Number(n)] + cnDecUnits[i];
            }
        }
    }
    if (ChineseStr == '') {
        ChineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (DecimalNum == '') {
        ChineseStr += cnInteger;
    }
    return ChineseStr;
}